package cn.edu.wynu.aspect;

import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

/**
 * 切面类，需要用以下两个注解标注
 * @Component 将Bean注入容器
 * @Aspect 切面类
 */
@Component
@Aspect
public class LogAopAspect {

    /**
     * 在切点表达式"execution(public void cn.edu.wynu.*Handler.*(..))"代表的函数之前执行该通知（函数）
     */
    @Before(value = "execution(public void cn.edu.wynu.*Handler.*(..))")
    public void dealAddLog() {
        System.out.println("前置通知");
    }

    @AfterThrowing("execution(public void cn.edu.wynu.*.*(..))")
    public void dealExceptionLog() {
        System.out.println("添加失败！");
    }

    /**
     * 在切点表达式"execution(public void cn.edu.wynu.*Handler.*(..))"代表的函数返回后执行该通知（函数）
     */
    @AfterReturning("execution(public void cn.edu.wynu.*Handler.*(..))")
    public void dealAfterReturnAddLog() {
        System.out.println("后置通知");
    }
}
